package jp.sinmetal.trainer.entity;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

import org.seasar.framework.beans.util.Beans;


/**
 * 大会エンティティ
 * @author sin
 *
 */
@Entity
public class Convention extends AbstractEntity {

	public final static int END_STATE_WIN_COUNT = 1;
	public final static int END_STATE_LIMIT_TIME = 2;

    /**
     * 大会ID
     * @author sin
     */
    @Id
    @GeneratedValue
    @Column(name="convention_id")
    public Integer conventionId;

    /**
     * 大会名
     * @author sin
     */
    @Column(name="convention_name")
    public String conventionName;

    /**
     * 主催者メンバーID
     * @author sin
     */
    @Column(name="member_id")
    public Integer memberId;

    /**
     *開催日時
     *@author sin
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="convention_date")
    public Date conventionDate;

    /**
     * twitterハッシュタグ
     * @author sin
     */
    @Column(name="hash_tag")
    protected String hashTag;

    /**
     * 大会コメント
     * @author sin
     */
    @Column(name="convention_comment")
    public String conventionComment;

    /**
     * 終了条件
     * @author sin
     */
    @Column(name="end_state")
    public Integer endState;

    /**
     * 終了勝利回数
     * @author sin
     */
    @Column(name="end_win_count")
    public Integer endWinCount;

    /**
     * 終了制限時間(分)
     * @author sin
     */
    @Column(name="end_limit_time_min")
    public Integer endLimitTimeMin;

    /**
     * 登録日時
     * @author sin
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="entry_date")
    public Date entryDate;

    /**
     * 更新日時
     * @author sin
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="update_date")
    public Date updateDate;

    /**
     * バージョン
     * @author sin
     */
    @Version
    public Long version;

    //----------- s2jdbc連結定義 ----------

    /**
     * メンバーエンティティ
     * @author sin
     */
    @ManyToOne
    @JoinColumn(name="member_id", referencedColumnName="member_id")
    public Member member;

    /**
     * 大会参加者一覧
     * @author sin
     */
    @OneToMany(mappedBy="convention")
    public List<ConventionMember> conventionMembers;

    /**
     * 大会ログ一覧
     * @author sin
     */
    @OneToMany(mappedBy="convention")
    public List<ConventionLog> conventionLogs;

    //---------- getter setter ----------

    /**
     * twitterハッシュタグ
     * @author sin
     *
     * @return
     */
    public String getHashTag() {
		return hashTag;
	}

	/**
	 * twitterハッシュタグ
     * @author sin
     *
	 * @param hashTag
	 */
	public void setHashTag(String hashTag) {
		this.hashTag = hashTag.replace("#", "");
	}

    //---------- ----------

	/**
	 * 開催日時
	 * @author sin
	 *
	 * @param date
	 */
	public Date getConventionDayAndTime() {
		return conventionDate;
	}

    /**
     * Conventionのインスタンスを返す
     * @author sin
     *
     * @param form
     * @return
     */
    public static Convention getInstance(Object form) {
    	return Beans.createAndCopy(Convention.class, form).dateConverter(DATE_FORMAT).execute();
    }

}